运维利用python开发自己的小程序或小工具,学习这篇就够了 您所在的位置:网站首页 python 编写程序 运维利用python开发自己的小程序或小工具,学习这篇就够了

运维利用python开发自己的小程序或小工具,学习这篇就够了

2023-09-18 12:45| 来源: 网络整理| 查看: 265

利用python中的tkinter来开发自己的小程序或小工具之查询数据库并返回和导出查询结果

本人也是python小白,各位大佬不要喷,毕竟咱不是专业的开发的,只是为了偷懒,写一下自己的小程序,如果大佬可以帮自己完善一下的话,自己也是很高兴的。

这个工具可以用来干什么 如果你需要经常的从数据库里面提取数据,那么他可以帮你实现 如果你热爱爬虫的话,需要美化一下操作界面的话,那么你可能需要他 如果你想逗你女朋友开心的话,那么你可能值得拥有他 等等等等等。。。 先来看看效果

建议一定要看这个效果图哈,否则,你到下面的代码就是一脸懵

python运维小工具(1)

1. 思路

思路是非常重要的,有一个好的思路,能让自己事半功倍

我的实例工具,思路如下

利用tkinter来构建基本的工具框架,也就是程序或者工具UI界面(小编是找了张A4纸,用铅笔花出来的,\哭) 需要具体能实现功能的python代码,需要镶嵌到框架中 建立个测试环境,测试一下看看效果如何 2. 实操 先引入我们需要的模板 #!/usr/bin/env python # coding:gbk import tkinter as tk import tkinter.messagebox import pymssql import datetime import openpyxl import split import time import os import sys import tkinter as tk :这个是今天的主角 import tkinter.messagebox :这个是弹出来的那个框口 import pymssql:这个是连接数据库用的,我这边的是sql server数据库 import datetime:这个是获取当前时间用的,主要是一个导出文件的时候命名作用 import openpyxl:这个是操作execl用的,把查询结果写入到execl表中 import split:这个是字符切割用的 import time:这个用来时间延长的。time.sleep import os:这个是获取当前程序运行路径的,方便放置或者提醒文件保存位置 import sys:这个好像没用到,先写上吧 再构建出我们需要的大框

也就是我们外面用到的大框

import tkinter as tk import tkinter.messagebox import pymssql import datetime import openpyxl import split import time import os import sys root = tk.Tk() # 创建窗口对象的背景色 root.title("Voc --统计长期离线企业小助手 v1.10 Mr.liu") #这个就是大框左上角的文字显示 root.geometry("950x300") #这个是框的大小 root.mainloop() # 进入消息循环

效果如下: 在这里插入图片描述

再构建出里面的小框 import tkinter as tk import tkinter.messagebox import pymssql import datetime import openpyxl import split import time import os import sys root = tk.Tk() # 创建窗口对象的背景色 root.title("Voc --统计长期离线企业小助手 v1.10 Mr.liu") #这个就是大框左上角的文字显示 root.geometry("950x300") #这个是框的大小 #当前不会显示出来这个框,因为框里面没有内容 denglu = tk.LabelFrame(root,text="登录",padx=10,pady=5) denglu.grid(row=0,sticky='N',column=0,padx=10,pady=10) #当前不会显示出来这个框,因为框里面没有内容 jg = tk.LabelFrame(root,text="查询结果",padx=10,pady=10) jg.grid(row=0,rowspan=2,column=1,sticky='N',padx=10,pady=10) root.mainloop() # 进入消息循环

效果和上面的一样: 在这里插入图片描述

再给左边的这个框里面添加内容 import tkinter as tk import tkinter.messagebox import pymssql import datetime import openpyxl import split import time import os import sys root = tk.Tk() # 创建窗口对象的背景色 root.title("Voc --统计长期离线企业小助手 v1.10 Mr.liu") #这个就是大框左上角的文字显示 root.geometry("950x300") #这个是框的大小 denglu = tk.LabelFrame(root,text="登录",padx=10,pady=5) denglu.grid(row=0,sticky='N',column=0,padx=10,pady=10) ##下面的这四行对应的下面的效果图看,比较容易理解 tk.Label(denglu,text= "数据库ip:").grid(row=0,column=0) tk.Label(denglu,text= "数据库端口:").grid(row=1,column=0) tk.Label(denglu,text= "数据库账户:").grid(row=2,column=0) tk.Label(denglu,text= "数据库密码:").grid(row=3,column=0) jg = tk.LabelFrame(root,text="查询结果",padx=10,pady=10) jg.grid(row=0,rowspan=2,column=1,sticky='N',padx=10,pady=10) root.mainloop() # 进入消息循环

效果图: 在这里插入图片描述

再给这四个标签添加后面的输入框 import tkinter as tk import tkinter.messagebox import pymssql import datetime import openpyxl import split import time import os import sys root = tk.Tk() # 创建窗口对象的背景色 root.title("Voc --统计长期离线企业小助手 v1.10 Mr.liu") #这个就是大框左上角的文字显示 root.geometry("950x300") #这个是框的大小 denglu = tk.LabelFrame(root,text="登录",padx=10,pady=5) denglu.grid(row=0,sticky='N',column=0,padx=10,pady=10) tk.Label(denglu,text= "数据库ip:").grid(row=0,column=0) tk.Label(denglu,text= "数据库端口:").grid(row=1,column=0) tk.Label(denglu,text= "数据库账户:").grid(row=2,column=0) tk.Label(denglu,text= "数据库密码:").grid(row=3,column=0) ##下面就是添加输入框部分 v1 = tk.StringVar() v2 = tk.StringVar() v3 = tk.StringVar() v4 = tk.StringVar() e1 = tk.Entry(denglu, textvariable=v1) e2 = tk.Entry(denglu, textvariable=v2) e3 = tk.Entry(denglu, textvariable=v3) e4 = tk.Entry(denglu, textvariable=v4, show="*") e1.grid(row=0, column=1, padx=10, pady=5) e2.grid(row=1, column=1, padx=10, pady=5) e3.grid(row=2, column=1, padx=10, pady=5) e4.grid(row=3, column=1, padx=10, pady=5) ### jg = tk.LabelFrame(root,text="查询结果",padx=10,pady=10) jg.grid(row=0,rowspan=2,column=1,sticky='N',padx=10,pady=10) root.mainloop() # 进入消息循环

效果如下: 在这里插入图片描述

输入框里面可以输入内容了,那我们需要将用户输入到框中的内容,get出来 import tkinter as tk import tkinter.messagebox import pymssql import datetime import openpyxl import split import time import os import sys root = tk.Tk() # 创建窗口对象的背景色 root.title("Voc --统计长期离线企业小助手 v1.10 Mr.liu") #这个就是大框左上角的文字显示 root.geometry("950x300") #这个是框的大小 denglu = tk.LabelFrame(root,text="登录",padx=10,pady=5) denglu.grid(row=0,sticky='N',column=0,padx=10,pady=10) tk.Label(denglu,text= "数据库ip:").grid(row=0,column=0) tk.Label(denglu,text= "数据库端口:").grid(row=1,column=0) tk.Label(denglu,text= "数据库账户:").grid(row=2,column=0) tk.Label(denglu,text= "数据库密码:").grid(row=3,column=0) v1 = tk.StringVar() v2 = tk.StringVar() v3 = tk.StringVar() v4 = tk.StringVar() e1 = tk.Entry(denglu, textvariable=v1) e2 = tk.Entry(denglu, textvariable=v2) e3 = tk.Entry(denglu, textvariable=v3) e4 = tk.Entry(denglu, textvariable=v4, show="*") e1.grid(row=0, column=1, padx=10, pady=5) e2.grid(row=1, column=1, padx=10, pady=5) e3.grid(row=2, column=1, padx=10, pady=5) e4.grid(row=3, column=1, padx=10, pady=5) ##创建一个def ,因为下面需要个按钮来触发他 def ceshi_sql(): #利用异常判断,如果能正常连接则提示测试连接成功 try: conn = pymssql.connect(host=e1.get(), user=e3.get(),port=e2.get(),password=e4.get()) #输入框里面取值就在这里,e1.get() tk.messagebox.askokcancel("提示","测试连接成功") #弹出提示框的功能 conn.close() #断开数据库连接 except Exception as e: ##如果不能连接则将异常e抛出 tk.messagebox.askokcancel("提示", e) ## 增加两个按钮,一个连接测试,一个退出,注意按钮触发的是command后面的def函数,这里没有()哈,注意 tk.Button(denglu, text="连接测试", width=10, command=ceshi_sql).grid(row=4, column=0, sticky='W', padx=10, pady=5) # W左边 tk.Button(denglu, text="退出", width=10, command=root.quit).grid(row=4, column=1, sticky='E', padx=10, pady=5) # E右边 jg = tk.LabelFrame(root,text="查询结果",padx=10,pady=10) jg.grid(row=0,rowspan=2,column=1,sticky='N',padx=10,pady=10) root.mainloop() # 进入消息循环

效果图: 在这里插入图片描述

看到了这里相信大家也是不是感觉非常简单可呢,下面小编就把第二个框里面的内容结合源码一起讲了哈

整体源码: #!/usr/bin/env python # coding:gbk import tkinter as tk import tkinter.messagebox import pymssql import datetime import openpyxl import split import time import os import sys root = tk.Tk() # 创建窗口对象的背景色 root.title("Voc --统计长期离线企业小助手 v1.10 Mr.liu") root.geometry("950x300") #第一个框开始 denglu = tk.LabelFrame(root,text="登录",padx=10,pady=5) denglu.grid(row=0,sticky='N',column=0,padx=10,pady=10) tk.Label(denglu,text= "数据库ip:").grid(row=0,column=0) tk.Label(denglu,text= "数据库端口:").grid(row=1,column=0) tk.Label(denglu,text= "数据库账户:").grid(row=2,column=0) tk.Label(denglu,text= "数据库密码:").grid(row=3,column=0) v1 = tk.StringVar() v2 = tk.StringVar() v3 = tk.StringVar() v4 = tk.StringVar() e1 = tk.Entry(denglu, textvariable=v1) e2 = tk.Entry(denglu, textvariable=v2) e3 = tk.Entry(denglu, textvariable=v3) e4 = tk.Entry(denglu, textvariable=v4, show="*") e1.grid(row=0, column=1, padx=10, pady=5) e2.grid(row=1, column=1, padx=10, pady=5) e3.grid(row=2, column=1, padx=10, pady=5) e4.grid(row=3, column=1, padx=10, pady=5) def ceshi_sql(): try: conn = pymssql.connect(host=e1.get(), user=e3.get(),port=e2.get(),password=e4.get()) tk.messagebox.askokcancel("提示","测试连接成功") conn.close() except Exception as e: tk.messagebox.askokcancel("提示", e) tk.Button(denglu, text="连接测试", width=10, command=ceshi_sql).grid(row=4, column=0, sticky='W', padx=10, pady=5) # W左边 tk.Button(denglu, text="退出", width=10, command=root.quit).grid(row=4, column=1, sticky='E', padx=10, pady=5) # E右边 ###第二个框的开始 ###创建框 jg = tk.LabelFrame(root,text="查询结果",padx=10,pady=10) jg.grid(row=0,rowspan=2,column=1,sticky='N',padx=10,pady=10) ###引入一个文本框text,设置他的大小为width=80,height=15 text=tk.Text(jg,width=80,height=15) ###创建一个滚动条,因为要显示的内容太多,没有滚动条,看不全部 scroll=tk.Scrollbar(jg) scroll.grid(row=0,column=1) text.grid(row=0,column=0) #创建是上下滚动的条:y scroll.config(command=text.yview) text.config(yscrollcommand=scroll.set) #创建一个def,让他可以被抹个按钮触发 def chaxun(): sql = 'select * from ceshi' ##利用异常处理 try: #主要实现的功能,就是到一个库里面执行一个sql语句,如果大家有需要可以自己设置 chaxun_conn = pymssql.connect(host=e1.get(), user=e3.get(),port=e2.get(),password=e4.get(), database='ya',charset='cp936') chaxun_conn.autocommit(True) cursor = chaxun_conn.cursor() #text文本域里面最开始显示空白 text.delete(0.0, tk.END) #执行sql语句 cursor.execute(sql) #拿到语句查询结果 jieguo = cursor.fetchall() cursor.close() #连接完一定要断开连接哈,数据库最怕没有这个 ### ###下面的是一个execl的写入,可以自己根据自己的实际情况改写 wb = openpyxl.Workbook() #sheet命名为长期离线企业数据统计' ws = wb.create_sheet('长期离线企业数据统计') #execl里面第一行第一列显示“字段名1” ws.cell(row=1, column=1).value = "字段名1" #execl里面第一行第二列显示“字段名2” ws.cell(row=1, column=2).value = "字段名2" #execl里面第一行第三列显示“字段名3” ws.cell(row=1, column=3).value = "字段名3" ws.cell(row=1, column=4).value = "字段名4" ws.cell(row=1, column=5).value = "字段名5" ws.cell(row=1, column=6).value = "字段名6" ws.cell(row=1, column=7).value = "字段名7" ws.cell(row=1, column=8).value = "字段名8" ws.cell(row=1, column=9).value = "字段名9" ws.cell(row=1, column=10).value = "字段名10" x = 1 for i in jieguo: x+=1 y = 1 ii = str(i) + '\n' text.insert(tk.INSERT,ii) #这个是写入到文本域里面 for n in i: ws.cell(row=x, column=y).value = n y+=1 else: text.insert(tk.END,'===================查询结束====================\n') today = ((str(datetime.datetime.now())).split('.')[0]).replace(':', "-") name = today + '长期离线企业数据.xlsx' ##保存execl wb.save(name) time.sleep(2) ##获取当前路径 pwd = os.getcwd() file_pwd = pwd + '\\' + name mess = '导出的文件保存于:' + file_pwd ##提示出,文件被保存的位置,方便查找文件 tk.messagebox.askokcancel("提示", mess) except Exception as e: text.delete(0.0, tk.END) jieguo = '\n======================不是有效的查询,请先【连接测试】=======================' text.insert(tk.INSERT, jieguo) text.insert(tk.INSERT, e) #关联 #创建一个函数,等待按钮触发 def show(): tk.messagebox.askokcancel("提示", '功能在进一步的确认中......') #创建一个按钮,触发chaxun函数,也就是上面的def函数 tk.Button(root, text="开始查询并导出文件", width=20, command=chaxun).grid(sticky='ws',row=1,column=0,padx=30, pady=5) # W左边 tk.Button(root, text="功能待定", width=10, command=show).grid(sticky='es',row=1,column=0, padx=30, pady=5) # W左边 root.mainloop() # 进入消息循环 结束语 小编写的这个程序是固定死的,但是思路是活得,主要是让大家理解一下思路。 小编的技术有限,希望大家不要建议,如果大家有什么好的建议,不妨评论出来,大家一起分享一下 最后就是希望和大家一起努力,创建更加美好的明天,为社会技术贡献一份自己的力量


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有